La cartographie est une discipline qui consiste à représenter des données géographiques sous forme de cartes. Elle permet d’analyser et de visualiser les phénomènes spatiaux, facilitant ainsi la prise de décision dans divers domaines : urbanisme, santé publique, économie, etc.
R est un outil puissant pour la manipulation et la visualisation des données géospatiales. Grâce à des packages comme sf, ggplot2 et tmap, il est possible de charger des fichiers géographiques (shapefiles), de les fusionner avec des données statistiques et de produire des cartes thématiques.
L’objectif de ce TP est de créer des cartes thématiques du Sénégal en intégrant des indicateurs socio-économiques issus de la base EHCVM Individu 2021. Nous utiliserons des données sur la pauvreté, l’accès aux services de santé, l’accès aux services bancaires et le revenu moyen.
Nous avons deux sources de données principales :
Les fichiers shapefile du Sénégal, contenant les limites administratives (régions, départements et communes).
Le fichier EHCVM Individu 2021, qui contient des informations socio-économiques sur les ménages et les individus interrogés.
Dans cette section, nous importons tous les packages qui seront utilisés par la suite.
readr : Ce package est utilisé pour lire des fichiers de données, notamment des fichiers CSV et TXT, de manière rapide et efficace. Il facilite l’importation des données dans R pour leur analyse.
haven : Il permet d’importer et d’exporter des fichiers de Stata (.dta), SPSS (.sav) et SAS (.sas7bdat). Il est utilisé ici pour lire les données de l’EHCVM, qui sont au format .dta.
mapsf : Ce package est utilisé pour la cartographie thématique. Il permet de générer facilement des cartes statiques en attribuant des couleurs aux zones en fonction d’indicateurs.
sf : Ce package est essentiel pour la manipulation des données spatiales sous le format Simple Features. Il permet de charger des shapefiles (.shp), de faire des jointures spatiales et d’effectuer des analyses géographiques.
ggplot2 : Ce package est utilisé pour la visualisation de données avec une approche basée sur la Grammar of Graphics. Il est utilisé ici pour tracer des cartes statiques en combinant geom_sf() avec des données spatiales.
dplyr : C’est un package de manipulation de données qui simplifie des opérations comme le filtrage, l’agrégation et la transformation des données. Il est utilisé pour calculer des indicateurs régionaux avant la cartographie.
utils : Il contient des fonctions de base pour R, notamment pour importer des fichiers, gérer les connexions et manipuler les objets en mémoire. Il est souvent utilisé pour des opérations générales comme la lecture de données ou l’affichage d’informations.
leaflet : Ce package est utilisé pour créer des cartes interactives. Il permet de superposer des couches de données, d’ajouter des popups et d’intégrer des fonds de carte dynamiques comme OpenStreetMap ou Google Maps.
leaflet.extras : C’est une extension du package leaflet qui ajoute des fonctionnalités supplémentaires, comme des contrôles interactifs, des effets visuels et des options avancées de personnalisation pour améliorer l’affichage des cartes.
viridis : Il est utilisé pour générer des palettes de couleurs optimisées pour la cartographie. Il permet d’assurer un bon contraste et une lisibilité accrue, notamment pour les personnes ayant des déficiences visuelles.
ggspatial : Ce package ajoute des outils SIG à ggplot2, comme l’affichage de nord, échelles, grilles et fonds de carte. Il est utile pour améliorer la précision et l’esthétique des cartes générées avec ggplot2.
Dans cette section, nous nous intéressons à la représentation spatiale des données de l’ECHVM 2021 du Sénégal. Nous chargeons la base de données, qui contient des informations socio-économiques au niveau des individus et des ménages. Cette base servira à calculer des indicateurs statistiques agrégés par région, département et commune afin d’alimenter les cartes thématiques.
Ici, nous allons générer des cartes thématiques des régions du Sénégal en utilisant un shapefile contenant les contours administratifs des régions.
Nous commençons par charger le shapefile correspondant :
# chargement du shapfile du Sénégal niveau régional
region <- st_read("../donnees/sen_admbnda_adm1_anat_20240520.shp", quiet= TRUE)
Nous calculons la moyenne de quelques variables pertinentes par région pour la représentation. Nous déterminerons l’âge moyen par région, l’âge moyen au premier mariage, le volume horaire de travail moyen ainsi que le salaire moyen par région.
base_moy <- base %>%
group_by(ADM1_FR) %>%
summarise(age_moyen = mean(age, na.rm = TRUE),
volhor_moyen = mean(volhor, na.rm = TRUE),
agemar_moyen = mean(agemar, na.rm = TRUE),
salaire_moyen = mean(salaire, na.rm = TRUE)) %>%
dplyr::select(ADM1_FR,volhor_moyen,age_moyen,agemar_moyen,salaire_moyen)
Nous devons maintenant agréger les données EHCVM par région afin de calculer des indicateurs tels que l’âge moyen, le volume horaire moyen, l’âge moyen au premier mariage et le salaire moyen.
base_moy_reg <- left_join(region,base_moy, by = "ADM1_FR")
Nous allons maintenant représenter graphiquement les indicateurs par région à l’aide de cartes interactives avec Leaflet.
age_palette <- colorNumeric(palette = "Blues", domain = base_moy_reg$age_moyen)
# Création de la carte interactive avec le nom des régions dans la popup
leaflet(base_moy_reg) %>%
addTiles() %>% # Couche OpenStreetMap
addPolygons(
color = "black", weight = 2, opacity = 1,
fillColor = ~age_palette(age_moyen), fillOpacity = 0.7,
popup = ~paste("<b>Région :</b>", ADM1_FR, "<br>",
"<b>Âge moyen :</b>", age_moyen)
) %>%
addLegend(
"bottomright", pal = age_palette, values = base_moy_reg$age_moyen,
title = "Âge moyen", opacity = 1
) %>%
addResetMapButton() %>% # Bouton de recentrage
addFullscreenControl() # Mode plein écran
Nous utilisons le même principe que pour la carte précédente mais en remplaçant la variable d’intérêt par volhor_moyen.
age_palette <- colorNumeric(palette = "Blues", domain = base_moy_reg$volhor_moyen)
# Création de la carte interactive avec le nom des régions dans la popup
leaflet(base_moy_reg) %>%
addTiles() %>% # Couche OpenStreetMap
addPolygons(
color = "black", weight = 2, opacity = 1,
fillColor = ~age_palette(volhor_moyen), fillOpacity = 0.7,
popup = ~paste("<b>Région :</b>", ADM1_FR, "<br>",
"<b>Volume horaire/an moyen :</b>", volhor_moyen)
) %>%
addLegend(
"bottomright", pal = age_palette, values = base_moy_reg$volhor_moyen,
title = "Volume horaire moyen emploi principal par région", opacity = 1
) %>%
addResetMapButton() %>% # Bouton de recentrage
addFullscreenControl() # Mode plein écran
Cette carte met en évidence les régions où le temps de travail est plus élevé.
Cette carte interactive représente l’âge moyen au premier mariage dans les différentes régions du Sénégal. L’objectif est de mettre en évidence les disparités régionales en matière d’âge d’union.
Coloration avec la palette “Reds” : Plus la couleur est foncée, plus l’âge moyen au premier mariage est élevé. Popup informative : En passant la souris sur une région, on peut voir son nom et l’âge moyen au premier mariage. Outils interactifs : La carte inclut des options de recentrage et un mode plein écran pour une exploration plus fluide.
age_palette <- colorNumeric(palette = "Reds", domain = base_moy_reg$agemar_moyen)
# Création de la carte interactive avec le nom des régions dans la popup
leaflet(base_moy_reg) %>%
addTiles() %>% # Couche OpenStreetMap
addPolygons(
color = "black", weight = 2, opacity = 1,
fillColor = ~age_palette(agemar_moyen), fillOpacity = 0.7,
popup = ~paste("<b>Région :</b>", ADM1_FR, "<br>",
"<b>Age moyen premier mariage:</b>", agemar_moyen)
) %>%
addLegend(
"bottomright", pal = age_palette, values = base_moy_reg$agemar_moyen,
title = "Volume horaire moyen emploi principal par région", opacity = 1
) %>%
addResetMapButton() %>% # Bouton de recentrage
addFullscreenControl() # Mode plein écran
Interprétation : Cette visualisation permet d’analyser les tendances matrimoniales et d’identifier les régions où les mariages ont lieu plus tôt ou plus tard.
Cette carte met en avant la distribution du salaire moyen des travailleurs par région au Sénégal.
Utilisation d’une échelle de couleurs rouges : Les zones en rouge foncé correspondent aux régions où le salaire moyen est plus élevé. Affichage interactif des valeurs : En cliquant sur une région, l’utilisateur obtient des informations détaillées sur le salaire moyen.
age_palette <- colorNumeric(palette = "Reds", domain = base_moy_reg$salaire_moyen)
# Création de la carte interactive avec le nom des régions dans la popup
leaflet(base_moy_reg) %>%
addTiles() %>% # Couche OpenStreetMap
addPolygons(
color = "black", weight = 2, opacity = 1,
fillColor = ~age_palette(salaire_moyen), fillOpacity = 0.7,
popup = ~paste("<b>Région :</b>", ADM1_FR, "<br>",
"<b>Age moyen premier mariage:</b>", salaire_moyen)
) %>%
addLegend(
"bottomright", pal = age_palette, values = base_moy_reg$salaire_moyen,
title = "Salaire moyen emploi principal par région", opacity = 1
) %>%
addResetMapButton() %>% # Bouton de recentrage
addFullscreenControl() # Mode plein écran
Cette carte permet de visualiser les disparités économiques entre les régions et peut servir d’outil d’aide à la décision pour les politiques publiques et les stratégies d’investissement
Nous passons à une échelle plus fine avec la carte départementale de l’âge moyen.
departement <- st_read("../donnees/sen_admbnda_adm2_anat_20240520.shp", quiet= TRUE)
base_moy2 <- base %>%
group_by(ADM2_FR) %>%
summarise(age_moyen = mean(age, na.rm = TRUE),
volhor_moyen = mean(volhor, na.rm = TRUE),
agemar_moyen = mean(agemar, na.rm = TRUE),
salaire_moyen = mean(salaire, na.rm = TRUE)) %>%
dplyr::select(ADM2_FR,volhor_moyen,age_moyen,agemar_moyen,salaire_moyen)
base_moy_dep <- left_join(departement,base_moy2, by = "ADM2_FR")
Cette analyse plus détaillée met en avant des écarts significatifs d’un departement à l’autre, mettant en évidence des différences en termes de démographie et de conditions de vie.
# Palette de couleurs pour l'âge moyen
age_palette <- colorNumeric(palette = "Reds", domain = base_moy_dep$age_moyen)
# Création de la carte interactive avec le nom des régions dans la popup
leaflet(base_moy_dep) %>%
addTiles() %>% # Couche OpenStreetMap
addPolygons(
color = "black", weight = 2, opacity = 1,
fillColor = ~age_palette(age_moyen), fillOpacity = 0.7,
popup = ~paste("<b>Préfecture :</b>", ADM2_FR, "<br>",
"<b>Âge moyen :</b>", age_moyen)
) %>%
addLegend(
"bottomright", pal = age_palette, values = base_moy_dep$age_moyen,
title = "Âge moyen", opacity = 1
) %>%
addResetMapButton() %>% # Bouton de recentrage
addFullscreenControl() # Mode plein écran
commune <- st_read("../donnees/sen_admbnda_adm3_anat_20240520.shp", quiet= TRUE)
base_moy3 <- base %>%
group_by(ADM3_FR) %>%
summarise(age_moyen = mean(age, na.rm = TRUE),
volhor_moyen = mean(volhor, na.rm = TRUE),
agemar_moyen = mean(agemar, na.rm = TRUE),
salaire_moyen = mean(salaire, na.rm = TRUE)) %>%
dplyr::select(ADM3_FR,volhor_moyen,age_moyen,agemar_moyen,salaire_moyen)
base_moy_com <- left_join(commune,base_moy3, by = "ADM3_FR")
# Palette de couleurs pour l'âge moyen
age_palette <- colorNumeric(palette = "Reds", domain = base_moy_com$volhor_moyen)
# Création de la carte interactive avec le nom des régions dans la popup
leaflet(base_moy_com) %>%
addTiles() %>% # Couche OpenStreetMap
addPolygons(
color = "black", weight = 2, opacity = 1,
fillColor = ~age_palette(age_moyen), fillOpacity = 0.7,
popup = ~paste("<b>commune :</b>", ADM3_FR, "<br>",
"<b>Âge moyen :</b>", age_moyen)
) %>%
addLegend(
"bottomright", pal = age_palette, values = base_moy_com$age_moyen,
title = "Âge moyen", opacity = 1
) %>%
addResetMapButton() %>% # Bouton de recentrage
addFullscreenControl() # Mode plein écran
## Warning in pal(c(r[1], cuts, r[2])): Some values were outside the color scale
## and will be treated as NA
## Warning in age_palette(age_moyen): Some values were outside the color scale and
## will be treated as NA